home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / X-Ray / X-Ray INIT Source / x_rayWDEF.c < prev   
Encoding:
Text File  |  1999-06-06  |  2.3 KB  |  79 lines  |  [TEXT/CWIE]

  1. // Copyright (C) 1999 Eric Roccasecca.  All rights reserved.
  2.  
  3. #include "X_Ray_Priv.h"
  4.  
  5. void X_Ray_TransparentCalcRgns (WindowPeek window, long param);
  6.  
  7. // creates an instance of the X_Ray_WDEF
  8. void X_Ray_BuildWDEF (void)
  9. {
  10.     OSErr    err;
  11.     
  12.     RoutineDescriptor wdefProc = BUILD_ROUTINE_DESCRIPTOR(uppWindowDefProcInfo, X_Ray_WDEF);
  13.     
  14.     gCommRec.wdefStub = NewHandleSysClear (sizeof(X_Ray_WDEFRec));
  15.     HLock (gCommRec.wdefStub);
  16.     (*(X_Ray_WDEFHandle)(gCommRec.wdefStub))->wdefProc = wdefProc;
  17. }        
  18.  
  19.  
  20. // the WDEF path for making other windows transparent
  21. pascal long X_Ray_WDEF (short varCode, WindowPeek theWindow, short message, long param)
  22. {
  23.     long                result;
  24.     Handle                stdWDEF;
  25.     
  26.     
  27.     stdWDEF = (Handle)X_Ray_GetWindowFeature ((WindowPtr)theWindow, kTransWindowStandardWDEF);
  28.     result = CallWindowDefProc ((RoutineDescriptor*)*stdWDEF, varCode, theWindow, message, param);
  29.     
  30.     // X_Ray only needs to be aware of certain messages
  31.     switch (message)
  32.     {
  33.         case kWindowMsgInitialize:
  34.             break;    
  35.         case kWindowMsgCleanUp:
  36.             break;
  37.         case kWindowMsgDraw:
  38.             break;
  39.         case kWindowMsgHitTest:
  40.             break;
  41.         case kWindowMsgCalculateShape:
  42.             X_Ray_TransparentCalcRgns ((WindowPeek)theWindow, param);
  43.             break;
  44.         case kWindowMsgStateChanged:
  45.             // As of Mac OS 8.5 this doesn't work.  How lame.
  46.             /*if (param & kWindowStateTitleChanged)
  47.                 DebugStr ("\ptitle changed");
  48.             if (param & kWindowStateSizeChanged)
  49.                 DebugStr ("\psize changed");
  50.             if (param & kWindowStatePositionChanged)
  51.                 DebugStr ("\pposition changed");
  52.             if (param & kWindowStateZOrderChanged)
  53.                 DebugStr ("\pz-order changed");
  54.             if (param & kWindowStateVisibilityChanged)
  55.                 DebugStr ("\pvisibility changed");
  56.             if (param & kWindowStateHiliteChanged)
  57.                 DebugStr ("\philite changed");
  58.             if (param & kWindowStateCollapseChanged)
  59.                 DebugStr ("\pcollapse changed");*/
  60.             break;
  61.         case kWindowMsgGetFeatures:
  62.             //if (*(long*)param & kWindowWantsDisposeAtProcessDeath)
  63.             //    DebugStr ("\pstd WDEF supports dispose at proc death msg");
  64.             break;
  65.         default:
  66.             break;
  67.     }
  68.     
  69.     return result;
  70. }
  71.  
  72.  
  73. // recalcs window regions to make them transparent
  74. void X_Ray_TransparentCalcRgns (WindowPeek window, long param) 
  75. {
  76.     DiffRgn (window->strucRgn, window->contRgn, window->strucRgn); // make window have a transparent/hollow struct region
  77.     // maybe add code the update sizes of all offscreen buffers to new size of window
  78. }
  79.